/**
 * 加密工具
 * 使用 AES 加密算法保护敏感信息
 */
import CryptoJS from 'crypto-js'

// 加密密钥（实际项目中应该从环境变量获取）
const SECRET_KEY = 'hotel-management-system-2024'

/**
 * AES 加密
 * @param {string} text - 需要加密的文本
 * @returns {string} 加密后的密文
 */
export function encrypt(text) {
  if (!text) return ''
  
  try {
    const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY).toString()
    return encrypted
  } catch (error) {
    console.error('加密失败:', error)
    return ''
  }
}

/**
 * AES 解密
 * @param {string} ciphertext - 需要解密的密文
 * @returns {string} 解密后的明文
 */
export function decrypt(ciphertext) {
  if (!ciphertext) return ''
  
  try {
    const bytes = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY)
    const decrypted = bytes.toString(CryptoJS.enc.Utf8)
    return decrypted
  } catch (error) {
    console.error('解密失败:', error)
    return ''
  }
}

/**
 * Base64 编码
 * @param {string} text - 需要编码的文本
 * @returns {string} 编码后的字符串
 */
export function base64Encode(text) {
  if (!text) return ''
  
  try {
    const wordArray = CryptoJS.enc.Utf8.parse(text)
    const base64 = CryptoJS.enc.Base64.stringify(wordArray)
    return base64
  } catch (error) {
    console.error('Base64编码失败:', error)
    return ''
  }
}

/**
 * Base64 解码
 * @param {string} base64String - 需要解码的字符串
 * @returns {string} 解码后的文本
 */
export function base64Decode(base64String) {
  if (!base64String) return ''
  
  try {
    const wordArray = CryptoJS.enc.Base64.parse(base64String)
    const text = wordArray.toString(CryptoJS.enc.Utf8)
    return text
  } catch (error) {
    console.error('Base64解码失败:', error)
    return ''
  }
}

/**
 * MD5 哈希（用于生成唯一标识，不可逆）
 * @param {string} text - 需要哈希的文本
 * @returns {string} MD5 哈希值
 */
export function md5Hash(text) {
  if (!text) return ''
  
  try {
    const hash = CryptoJS.MD5(text).toString()
    return hash
  } catch (error) {
    console.error('MD5哈希失败:', error)
    return ''
  }
}

/**
 * SHA256 哈希（更安全的哈希算法）
 * @param {string} text - 需要哈希的文本
 * @returns {string} SHA256 哈希值
 */
export function sha256Hash(text) {
  if (!text) return ''
  
  try {
    const hash = CryptoJS.SHA256(text).toString()
    return hash
  } catch (error) {
    console.error('SHA256哈希失败:', error)
    return ''
  }
}

